package com.atguigu.decorator;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: 装饰者主类
 * @create: 2022-02-17 15:09
 **/
public class Decorator extends Drink{

    private final Drink drink;

    /**
     * 组合 被装饰者抽象类
     * @param drink 被装饰者
     */
    public Decorator(Drink drink) {
        this.drink = drink;
    }

    @Override
    public float cost() {
        //此方法会被递归，打印的行数会随着被装饰者的扩大（美式咖啡 -> 美式咖啡+牛奶）而增加
        System.out.println("cost-调用的类名：" + this.getClass().getName() +"  &&  "+ super.getClass().getName());
        //getPrice 装饰者自己的价格     +  单品咖啡（被装饰者）的价格 (随着原理类图2的被装饰者不断加深，被装饰者也在不断往外层切换，每切换一次drink.cost获取的就是上一次的结果值，递归)
        return super.getPrice() + drink.cost();
    }

    @Override
    public String getDes() {
        // drink.getDes() 输出被装饰者的信息， super要不要都行 都是从Drink中获取信息
        return super.des + " " + super.getPrice() + "  &&  " + drink.getDes();
    }
}
